package com.gin.no_gay_alliance.listener;

import android.content.Context;
import android.content.DialogInterface;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;

import com.gin.no_gay_alliance.activity.TopicListActivity;
import com.gin.no_gay_alliance.activity.TopicReadActivity;
import com.gin.no_gay_alliance.app.MyApplication;
import com.gin.no_gay_alliance.database.entity.TopicHistory;
import com.gin.no_gay_alliance.param.TopicListParam;
import com.gin.no_gay_alliance.utils.AlertDialogUtils;
import com.gin.no_gay_alliance.viewmodel.TopicItem;

import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * Listener使用的工具方法
 *
 * @author : ginstone
 * @version : v1.0.0
 * @since : 2023/8/24 11:26
 **/
public class ListenerUtils {
    /**
     * 点击TopicItem时，根据入口类型执行不同操作:打开主题 / 版面 / 合集
     *
     * @param topicItem TopicItem
     * @param context   上下文
     */
    public static void onClickTopicItem(TopicItem topicItem, @NonNull Context context) {
        // 根据入口类型不同执行操作
        switch (topicItem.entranceType) {
            // 打开主题
            case TOPIC: {
                topicReadStartActivity(context, topicItem);
                break;
            }
            // 打开版面
            case FORUM: {
                TopicListParam param = new TopicListParam();
                param.type = TopicListParam.Type.FORUM_LIST;
                param.forumId = String.valueOf(topicItem.forumId);
                param.title = topicItem.title;
                TopicListActivity.startActivity(context, param);
                break;
            }
            // 打开合集
            case COL: {
                TopicListParam param = new TopicListParam();
                param.type = TopicListParam.Type.COL_LIST;
                param.colTid = topicItem.topicId;
                param.title = topicItem.title;
                TopicListActivity.startActivity(context, param);
                break;
            }
        }
    }

    /**
     * 先检查浏览记录，再打开主题
     *
     * @param context
     * @param topicItem
     */
    public static void topicReadStartActivity(@NonNull Context context, TopicItem topicItem) {
        // 是否点击了确认
        AtomicBoolean confirmed = new AtomicBoolean(false);
        // 检查浏览记录，如果发现存在，提示上次浏览的页数
        TopicHistory topicHistory = MyApplication.app.ngaDatabase.topicHistoryDao().get(topicItem.topicId);
        if (topicHistory != null && topicHistory.page > 1) {
            String message = String.format(Locale.CHINA, "上次看到了第 %d 页, 是否继续？", topicHistory.page);
            AlertDialog dialog = AlertDialogUtils.showConfirm(context, "发现浏览记录", message, (d, which) -> {
                if (which == DialogInterface.BUTTON_POSITIVE) {
                    confirmed.set(true);
                    TopicReadActivity.startActivity(context, topicItem, topicHistory.page);
                }
            });
            // 窗口关闭时，如果未点击确认，打开第一页
            dialog.setOnDismissListener(d -> {
                if (!confirmed.get()) {
                    TopicReadActivity.startActivity(context, topicItem, 1);
                }
            });
            return;
        }
        // 没有历史，打开第一页
        TopicReadActivity.startActivity(context, topicItem, 1);
    }


    /**
     * 长按TopicItem时，根据入口类型执行不同操作:打开主题 / 版面 / 合集
     *
     * @param topicItem TopicItem
     * @param context   上下文
     */
    public static void onLongClickTopicItem(TopicItem topicItem, @NonNull Context context) {
        // 根据入口类型不同执行操作
        switch (topicItem.entranceType) {
            // 打开主题
            case TOPIC: {
                TopicReadActivity.startActivity(context, topicItem.title, topicItem.topicId, topicItem.totalPage, null, topicItem.totalPage);
                break;
            }
            // 打开版面
            case FORUM: {
                //todo 暂时继承短按功能
                onClickTopicItem(topicItem, context);
                break;
            }
            // 打开合集
            case COL: {
                //todo 暂时继承短按功能
                onClickTopicItem(topicItem, context);
                break;
            }
        }
    }
}
